package co.edu.uniandes.ecos.itera.tsp.mundo;

import co.edu.uniandes.ecos.itera.tsp.anotaciones.Avance;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Avances;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Loc;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Tiempos;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.LogT;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Representa a un Rol que trabaja en un Proyecto
 */
@Tiempos({
	@LogT(date="2011-03-13", min=10, taskId=5),
	@LogT(date="2011-03-13", min=3, taskId=5)
})
@Avances({
	@Avance(taskId=5, termino='S'),
	@Avance(taskId=15, termino='S')
})
public class Rol implements Serializable
{
	/**
	 * identificador unico de este objeto
	 */
	private static final long serialVersionUID = -5187194773477339840L;

	/**
	 * Listado de desarrolladores de este Rol
	 */
	private List<Desarrollador> desarrolladores;
	
	/**
	 * Codigo de este Rol
	 */
	private int codigo;
	
	/**
	 * Nombre de este Rol
	 */
	private String nombre;

	/**
	 * Establece el Codigo de este Rol
	 * @param codigo Codigo de este Rol
	 */
	@Loc(size=1, taskId=5)
	public void setCodigo(int codigo) 
	{
		this.codigo = codigo;
	}

	/**
	 * Consulta el Codigo de este Rol
	 * @return Codigo de este Rol
	 */
	@Loc(size=1, taskId=5)
	public int getCodigo() 
	{
		return codigo;
	}

	/**
	 * Establece el Nombre de este Rol
	 * @param nombre Nombre de este Rol
	 */
	@Loc(size=1, taskId=5)
	public void setNombre(String nombre) 
	{
		this.nombre = nombre;
	}

	/**
	 * Consulta el Nombre de este Rol
	 * @return Nombre de este Rol
	 */
	@Loc(size=1, taskId=5)
	public String getNombre() 
	{
		return nombre;
	}
	
	/**
	 * Agrega un desarrollador al grupo de desarrolladores de este rol
	 * @param desarrollador Desarrollador a agregar
	 */
	@Loc(size=1, taskId=5)
	public void agregarDesarrollador(Desarrollador desarrollador)
	{
		this.desarrolladores.add(desarrollador);
	}
	
	/**
	 * Lista los Desarrolladores de este Rol
	 * @return Listado de los Desarrolladores de este rol
	 */
	@Loc(size=1, taskId=5)
	public List<Desarrollador> listarDesarrolladores()
	{
		return this.desarrolladores;
	}
	
	/**
	 * Constructor por Defecto
	 */
	public Rol()
	{
		this.desarrolladores = new ArrayList<Desarrollador>();
	}
	
	@Override
	public String toString()
	{
		return String.format("%s", this.nombre);
	}
	
}
